package com.blueocean.care.management;

import com.blueocean.care.management.filter.ErrorCustomFilter;
import com.blueocean.care.management.filter.Post0CustomFilter;
import com.blueocean.care.management.filter.Pre0CustomFilter;
import com.blueocean.care.management.filter.Route0CustomFilter;
import com.netflix.zuul.ZuulFilter;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) //spring-boot 启动注解
@EnableZuulProxy// spring-cloud 服务注解
@EnableDiscoveryClient
public class GateWay{
     public static void main(String [] args) {
            new SpringApplicationBuilder(GateWay.class).web(true).run(args);
        }
     /** 
      *  
      * attention:简单跨域就是GET，HEAD和POST请求，但是POST请求的"Content-Type"只能是application/x-www-form-urlencoded, multipart/form-data 或 text/plain 
      * 反之，就是非简单跨域，此跨域有一个预检机制，说直白点，就是会发两次请求，一次OPTIONS请求，一次真正的请求 
      */  
     @Bean  
     public CorsFilter corsFilter() {  
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();  
         source.registerCorsConfiguration("/**", buildConfig());  
         return new CorsFilter(source);  
     }
     @Bean
     public Pre0CustomFilter pre0CustomFilter(){
         return new Pre0CustomFilter();
     }

     //@Bean
     public Route0CustomFilter route0CustomFilter(){
         return new Route0CustomFilter();
     }

     @Bean
     public Post0CustomFilter post0CustomFilter(){
         return new Post0CustomFilter();
     }

     //@Bean
     public ErrorCustomFilter errorCustomFilter(){
         return new ErrorCustomFilter();
     }
     private CorsConfiguration buildConfig() {
 		CorsConfiguration config = new CorsConfiguration();  
         config.setAllowCredentials(true); // 允许cookies跨域  
         config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI，*表示全部允许，在SpringMVC中，如果设成*，会自动转成当前请求头中的Origin  
         config.addAllowedHeader("*");// #允许访问的头信息,*表示全部  
         config.setMaxAge(18000L);// 预检请求的缓存时间（秒），即在这个时间段里，对于相同的跨域请求不会再预检了  
         config.addAllowedMethod("*");
 		return config;
 	}
}